home *** CD-ROM | disk | FTP | other *** search
/ Fritz: All Fritz / All Fritz.zip / All Fritz / FILES / PROGBLER / ASMCODE2.LZH / DEC_ADJ.ASM < prev    next >
Assembly Source File  |  1983-10-13  |  2KB  |  67 lines

  1. ;DEC_ADJ.ASM           9-28-83
  2. ;
  3. ;INPUT AX = 16 BIT SIGNED NUMBER
  4. ;      CX = NUMBER OF CHARACTER TO RIGHT OF DECIMAL POINT
  5. ;THIS PROGRAM MULTIPLIES AX BY 10 AND ADJUSTS CX TO MAKE THE
  6. ;NUMBER IN AX A MAXIMUN VALUE AND CX A EVEN NUMBER
  7.  
  8. ;----------------------------------------------------
  9. ;DATA SEGMENT PARA 'DATA'
  10. ;SAVE_NUM   DW  ?
  11. ;DATA    ENDS
  12. ;----------------------------------------------------
  13. CODE SEGMENT PARA PUBLIC 'CODE'
  14.  
  15. DEC_ADJ PROC FAR
  16.        ASSUME CS:CODE
  17.  ;     ASSUME DS:DATA
  18.        PUBLIC DEC_ADJ
  19.  
  20.  
  21.        CMP AX,0         ;IF NUMBER IS ZERO JUMP TO END AND EXIT
  22.        JZ DEC_ADJ_EXIT
  23.  
  24.        MOV  BX,10       ;GOING TO MULTIPLY AX BY 10 AND INCREMENT
  25.                         ;  CX BY 1 UNTIL GET A CARRY (AX GOT TOO
  26.                         ;  LARGE)
  27. MUL_BY_10:
  28.        MOV  SI,AX       ;SAVE CURRENT VALUE OF NUMBER  IN DI
  29.        IMUL  BX
  30.        JC   UN_DO_LAST  ;LAST MULTIPLY WAS ONE TOO MANY GO UNDO
  31.        INC  CX
  32.        JMP  MUL_BY_10
  33.  
  34. UN_DO_LAST:          ;SAVE_NUM CONTAINS VALUE BEFORE LAST MULTI
  35.   ;    MOV  AX,DX       ;UNDO LAST MULTIPLY
  36.   ;    MOV  SAVE_NUM,AX ;SAVE PRESENT VALUE OF NUMBER
  37.       
  38.  
  39. ;CHECK THAT CX IS EVEN NUMBER
  40.        MOV  AX,CX       ;PUT IN AX FOR DIVIDE
  41.        CBW
  42.        MOV  BL,2        ;GOING TO DO A BYTE DIVIDE
  43.        DIV  BL          ;AL WILL CONTAIN REMAINDER
  44.        CMP  AH,0        ;IF REMAINDER WAS ZERO CX WAS EVEN
  45.        JZ   DEC_ADJ_EXIT   ;WAS EVEN GO EXIT
  46.        MOV  AX,SI          ;WAS NOT EVEN PUT NUMBER BACK IN AX
  47.        MOV  BX,10       ;  AND divide   BY 10 
  48.        CWD
  49.        IDIV BX
  50.        DEC  CX          ;ADJUST CX FOR divide  
  51.  
  52.        JMP  DEC_ADJ_EXIT1
  53.  
  54.  
  55. DEC_ADJ_EXIT:
  56.        MOV  AX,SI
  57.  
  58. DEC_ADJ_EXIT1:
  59.  
  60. ;ax has number and cx has number of characters after decimal point
  61.  
  62.        RET               ;RETURN TO CALLER
  63.  
  64. DEC_ADJ  ENDP
  65. CODE     ENDS
  66.          END
  67.